
function getPage(pageNo, pageSize, totalCount, pageGap) {
  var pageNum = pageNo ? pageNo : 1;
  var allPages = totalCount ? Math.ceil(totalCount / pageSize) : 0;

  var beginNo = (function(allPages, pageGap, pageNum) {
    if (allPages <= pageGap) {
      return 1;
    }
    var tmpNum = pageNum - Math.floor(pageGap/2);
    var begin = pageGap % 2 == 0 ?  tmpNum + 1 : tmpNum;
    if (begin <= 0) {
      return 1;
    }
    if (begin > (allPages - (pageGap - 1))) {
      return allPages - (pageGap - 1);
    }
    return begin;
  })(allPages, pageGap, pageNum);

  var endNo = (function(allPages, pageGap, pageNum) {
    if (allPages <= pageGap) {
      return allPages;
    }
    var end = pageNum + Math.floor(pageGap/2);
    if (end >= allPages) {
      return allPages;
    }
    if (end < pageGap) {
      return pageGap;
    }
    return end;
  })(allPages, pageGap, pageNum);

  var pageArr = (function(beginNo, endNo) {
    var pageArr = [];
    for(var i = beginNo; i <= endNo; i++){
      pageArr.push(i);
    }
    return pageArr;
  })(beginNo, endNo);

  return {
    pageNo: pageNum,
    pageSize: pageSize,
    hasPrev: pageNum > 1 && allPages > 1,
    hasNext: pageNum < allPages && allPages > 1,
    totalCount: totalCount,
    pageArr: pageArr
  }
}

exports.getPage = getPage;